package com.z.redis.command;

import com.z.redis.RedisCore;
import com.z.redis.resp.Resp;
import io.netty.channel.ChannelHandlerContext;

import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import org.apache.log4j.Logger;

/**
 * 负责统一命令接口、协议和业务解耦、集成持久化、标准化通信
 * 类型 怎么设置命令 怎么执行命令
 */
public interface Command {
    Charset CHARSET = StandardCharsets.UTF_8;
    static final Logger LOGGER = Logger.getLogger(Command.class);

    /**
     * 设置命令内容
     * 将客户端发送的RESP协议数据解析成命令参数
     * @param array 命令内容
     */
    void setContent(Resp[] array);

    /**
     * 获取接口类型 如 CommandType.SET、CommandType.GET
     * @return 接口类型
     */
    CommandType type();

    /**
     * 处理命令
     * 执行具体的Redis命令逻辑，操作内存数据库并返回响应
     * @param ctx 通信管道 用于像客户端发送响应
     * @param redisCore 内存数据库 提供API操作键值对
     */
    void handle(ChannelHandlerContext ctx, RedisCore redisCore);
}
